﻿#ifndef WEBSOCKETAPPLY_H
#define WEBSOCKETAPPLY_H

#include <QMainWindow>
#include <QThread>
#include <QMessageBox>
#include <QDateTime>
#include <QListWidgetItem>
#include <QNetworkInterface>
#include <QTimer>
#include "WebSocketClient.h"
#include "WebSocketServer.h"

QT_BEGIN_NAMESPACE
namespace Ui { class WebSocketApply; }
QT_END_NAMESPACE

class WebSocketApply : public QMainWindow
{
    Q_OBJECT

public:
    WebSocketApply(QWidget *parent = nullptr);
    ~WebSocketApply();
public slots:
    //客户端
    void C_recive(const QString& message);
    void C_reciveBinary(const QByteArray& message);
    void C_connection(const QString& msg, const bool state);
    void C_error(const QString& msg);
    //服务端
    void S_recive(const QString& ClientInfo, const QString& message);
    void S_reciveBinary(const QString& ClientInfo, const QByteArray& message);
    void add_client(const QString& ClientInfo);
    void remove_client(const QString& ClientInfo);
    void S_error(const QString& error_message);
signals:
    //to客户端
    void C_connect(const QString& url);
    void C_disconnect();
    void C_send(const QString& message);
    void C_sendBinary(const QByteArray& message);
    //to服务端
    void S_start(const QString ip, const qint32 port = 10086);
    void S_stop();
    void S_send(const QString& ClientInfo, const QString& message, const bool isAllClients);
    void S_sendBinary(const QString& ClientInfo, const QByteArray& message, const bool isAllClients);
    void S_remove(const QString& ClientInfo);

private slots:
    void on_client_connect_clicked();

    void on_client_disconnect_clicked();

    void on_client_send_clicked();

    void on_Cclear_clicked();

    void on_Sclear_clicked();

    void on_act_About_triggered();

    void on_server_start_clicked();

    void on_server_stop_clicked();

    void on_server_send_clicked();

    void on_kick_clicked();

    void on_SLoopSend_stateChanged(int arg1);

    void on_CLoopSend_stateChanged(int arg1);

private:
    Ui::WebSocketApply *ui;
    WSClient* wsclient;
    QThread* client_thread;
    WSServer* wsserver;
    QThread* server_thread;
    QTimer* STimer;
    QTimer* CTimer;
};
#endif // WEBSOCKETAPPLY_H
